#ifndef __GCODE_H__
#define __GCODE_H__

#include "MC_include.h"
#include <stdbool.h>

#define X_AXIS 0
#define Y_AXIS 1
#define Z_AXIS 2

#define SM_DEFAULT_FEED_RATE 350		// G1  默认插补速度50 
#define SM_DEFAULT_SEEK_RATE 1500	// G0 millimeters per minute   默认定位速度  单位是mm/每分

#define GCSTATUS_OK						0  //状态返回值OK
#define GCSTATUS_BAD_NUMBER_FORMAT		1  //状态返回值糟糕的数据格式
#define GCSTATUS_EXPECTED_COMMAND_LETTER 2   //状态返回  非预计的命令字母
#define GCSTATUS_UNSUPPORTED_STATEMENT	3  //返回状态 不支持的命令声明
#define GCSTATUS_FLOATING_POINT_ERROR	4   //返回状态浮点错误
#define GCSTATUS_UNSUPPORTED_PARAM		5   //不支持的参数
#define GCSTATUS_UNSOPORTED_FEEDRATE	6  //不支持的速度
#define GCSTATUS_TABLE_SIZE_OVER_X		7     //坐标超出大范围
#define GCSTATUS_TABLE_SIZE_OVER_Y		8    //坐标超出大范围
#define GCSTATUS_TABLE_SIZE_OVER_Z		9     //坐标超出大范围
#define GCSTATUS_CANCELED				101    //状态取消

#define NEXT_ACTION_DEFAULT 0  //下一个默认的动作
#define NEXT_ACTION_DWELL_G4 1   //下一步行动暂停G4
#define NEXT_ACTION_GO_HOME_G28 2  //下一步行动  回到原点
#define NEXT_ACTION_RESET_XYZ_G92 3   //复位XYZ  归0
#define NEXT_ACTION_STOP 4    //行动停止
#define NEXT_ACTION_SEEK_G0 5 // G0  快速移动
#define NEXT_ACTION_LINEAR_G1 6 // G1 直线插补
#define NEXT_ACTION_EXTRUDER_STOP 7  //挤出机停止动作
#define NEXT_ACTION_EXTRUDER_ON 8  //挤出机开
#define NEXT_ACTION_EXTRUDER_FAST_T 9  //挤出机快速
#define NEXT_ACTION_EXTRUDER_WAIT_T 10 //下一步行动等待
#define NEXT_ACTION_CW_ARC 11 //顺圆
#define NEXT_ACTION_CCW_ARC 12 //逆圆

#define CNC_DELAY(x) GUI_Delay(x)


void gc_init(void); //解析器初始化
uint8_t gc_execute_line(char* line);
void gc_execute(char parameter);
#endif

